package com.tedu.review.day02;
/**
 * 类的创建过程(JVM虚拟机--内存创建流程：栈】堆、方法区)
 * 1.从程序到入口 加载xxx.class文件，类对象存到方法区中【方法去:并行】
 *    2.加载xxx.class文件中，存在static静态块，存入方法区，创建对象之前提前被调用
 *  3.发现cs 引用，将这个引用转为地址值：0X000,存入栈内存【栈区：并行】
 *  4.发现new 对象(),给对象申请【随意】空间
 *  理解：宾馆，很多屋子！ 前台服务员【引用】---来一个客人【new】，随便开个房
 *  5.类创建【实例化】执行步骤：先执行方法区：静态块-->执行普通代码块-->初始化
 *  6.给栈中成员变量地址值进行指向，堆内存当中随意开辟空间（初始值）【与栈内存地址一致】
 *  7.给栈中成员变量地址值进行指向，堆内存当中随意开辟空间（赋值）【与栈内存地址一致】
 *
 *  调用结束操作
 *  1.栈：编译器自动分配，使用完毕自动释放
 *  2.堆：一般由程序员分配释放，若程序员没有释放，Java程序自动进行垃圾回收
 *                                         GC垃圾回收
 *  3.全局区（静态区）：全局变量跟静态变量在内存中存在一起的
 *                   初始化的全局变量和静态变量存在是一起的
 *                   未初始化的全局变量和未初始化的静态变量在相邻的另一块区域
 *                ---程序结束  释放
 *  4.常量池：存在方法区中   --程序结束  释放 【JavaAPI 字符串】
 */
public class 类的创建过程 {
    public static void main (String[] args){
        //完成一次创建对象
        CountrySide cs=new CountrySide();
    }
}
class CountrySide {

    {
        System.out.println("我就在沈阳大街骂你");
    }
    static{
        System.out.println("腰子都给我创掉了");
    }
    //1.成员变量：变量，类中存在变量就是成员变量，可以有修饰符修饰
    private String name="你等着嗷";
    private int age=2_5;
    //2.构造器|构造方法|句柄：创建对象初始化
    public CountrySide(){
        name="二次元刀哥";
        System.out.println("我不道呀");
    }






}
